unit F_ReporteConfirmacion;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, QRCtrls, QuickRpt, ExtCtrls, DB, ZAbstractRODataset,
  ZAbstractDataset, ZDataset, JvGIF;

type
  TF_ConfirmacionPedido = class(TForm)
    QR_CommitOrder: TQuickRep;
    ZQuery_Orders: TZQuery;
    ZQuery_OrdersID: TIntegerField;
    ZQuery_OrdersCOSTO_PEDIDO: TFloatField;
    ZQuery_OrdersNOMBRE: TStringField;
    ZQuery_Detalle_Orden: TZQuery;
    DS_Orden: TDataSource;
    ZQuery_OrdersNOMBRE_CARRERA: TStringField;
    QRGroupMaterias: TQRGroup;
    QRExpr1: TQRExpr;
    QRDetailModulos: TQRBand;
    QRDBText3: TQRDBText;
    QRBand3: TQRBand;
    QRL_ConfirmacionDePedido: TQRLabel;
    QRSD_Date: TQRSysData;
    QRSD_Time: TQRSysData;
    QRL_Hora: TQRLabel;
    QRBand4: TQRBand;
    QRL_Materia: TQRLabel;
    QRL_Apunte: TQRLabel;
    QRPageFooter: TQRBand;
    QRLabel4: TQRLabel;
    QRL_Punto: TQRLabel;
    QRDBText1: TQRDBText;
    QRL_Usuario: TQRLabel;
    QRLabel1: TQRLabel;
    QRDBText2: TQRDBText;
    QRLabel2: TQRLabel;
    QRDBText4: TQRDBText;
    QRLabel52: TQRLabel;
    QRSysData1: TQRSysData;
    QRL_Pg_Impresas: TQRLabel;
    QRDBText5: TQRDBText;
    SummaryBand1: TQRBand;
    QRLabel3: TQRLabel;
    QRImage1: TQRImage;
    ZQuery_Detalle_OrdenPAGINA_INICIAL: TIntegerField;
    ZQuery_Detalle_OrdenPAGINA_FINAL: TIntegerField;
    ZQuery_Detalle_OrdenDENOMINACION: TStringField;
    ZQuery_Detalle_OrdenNOMBRE_DOCUMENTO: TStringField;
    ZQuery_Detalle_OrdenCANT_PAG_IMPRESAS: TLargeintField;
    QRShape1: TQRShape;
    QRL_Fecha: TQRLabel;
    QRLabel5: TQRLabel;
    QRSysData3: TQRSysData;
    QRLabel6: TQRLabel;
    QRDBText6: TQRDBText;
    QRLabel7: TQRLabel;
    QRLabel8: TQRLabel;
    QRDBText9: TQRDBText;
    QRShape2: TQRShape;
    QRShape3: TQRShape;
    QRShape4: TQRShape;
    QRShape5: TQRShape;
    QRShape6: TQRShape;
    QRLabel9: TQRLabel;
    Label_Bonificacion_Valor: TQRLabel;
    QRImage2: TQRImage;
    QRImage3: TQRImage;
    QRLabel12: TQRLabel;
    QRShape9: TQRShape;
    QRLabel13: TQRLabel;
    QRShape10: TQRShape;
    QRLabel14: TQRLabel;
    QRLabel15: TQRLabel;
    QRLabel16: TQRLabel;
    ZROQ_Total_Pedido_Teoria: TZReadOnlyQuery;
    ZROQ_Total_Acumulado: TZReadOnlyQuery;
    ZQ_TOTAL_ORDEN: TZQuery;
    ZQ_TOTAL_ORDENFK_ID_ORDEN: TIntegerField;
    ZQ_TOTAL_ORDENCOSTO_PEDIDO: TFloatField;
    ZROQ_Valor_Variable: TZReadOnlyQuery;
    ZROQ_Valor_VariablePRECIO: TFloatField;
    L_Total: TQRLabel;
    ZQuery_OrdersIDACCOUNTTYPE: TIntegerField;
    L_Total2: TQRLabel;
    ZROQ_Get_Total_Pagado: TZReadOnlyQuery;
  private
    { Private declarations }
    idOrden, IDCliente: integer;
    R_TotalOrden, R_TotalOrdenTeoria, R_TotalAcumulado: Currency;

    function GetTotalOrder(idOrden: integer): Currency;
    function GetTotalTheoryOrder(idOrden: integer): Currency;
    function GetTotalAcumulado(ID_Cliente: integer): Currency;
    function GetVariable(IDProducto: integer): Currency;
    function GetTotalPagado(IDPedido: integer): Currency;
    function NonNegativeValue(Value:currency):currency;

  public
    { Public declarations }
    Constructor Create(AOwner: TComponent; ID_PEDIDO: Integer; TotalOrden, TotalOrdenTeoria, TotalAcumulado: Currency);
    procedure CargarPedido(idPedido:integer);
    procedure CalcularTotal;
  end;

var
  F_ConfirmacionPedido: TF_ConfirmacionPedido;

implementation

uses DM_Persistencia;

{$R *.dfm}

procedure TF_ConfirmacionPedido.CargarPedido(idPedido:integer);
begin
  with ZQuery_Orders do
    begin
      Close;
      ParamByName('ID_PEDIDO').AsInteger:= idPedido;
      Open;
    end;

  with ZQuery_Detalle_Orden do
    begin
      Close;
      ParamByName('ID').AsInteger:= idPedido;
      Open;
    end;
end;

Constructor TF_ConfirmacionPedido.Create(AOwner: TComponent; ID_PEDIDO: Integer; TotalOrden, TotalOrdenTeoria, TotalAcumulado: Currency);
begin
  inherited Create(AOwner);
  CargarPedido(ID_PEDIDO);
  idOrden:= ID_PEDIDO;
  R_TotalOrden:= TotalOrden;
  R_TotalOrdenTeoria:= TotalOrdenTeoria;
  R_TotalAcumulado:= TotalAcumulado;
  CalcularTotal;
end;

function TF_ConfirmacionPedido.GetTotalOrder(idOrden: integer): Currency;
begin
  with ZQ_TOTAL_ORDEN do
    begin
      Close;
      ParamByName('ID_ORDEN').AsInteger:= idOrden;
      Open;
      Result:= +FieldByName('COSTO_PEDIDO').AsCurrency;
    end;
end;


function TF_ConfirmacionPedido.GetTotalTheoryOrder(idOrden: integer): Currency;
begin
  with ZROQ_Total_Pedido_Teoria do
    begin
      Close;
      ParamByName('ID_ORDEN').AsInteger:= idOrden;
      Open;
      Result:= +FieldByName('COSTO_PEDIDO_TEORIA').AsCurrency;
    end;
end;

function TF_ConfirmacionPedido.GetTotalAcumulado(ID_Cliente: integer): Currency;
begin
  with ZROQ_Total_Acumulado do
    begin
      Close;
      ParamByName('ID_USUARIO').AsInteger:= ID_Cliente;
      Open;
      Result:= +FieldByName('TOTAL_ACUMULADO').AsCurrency;
    end;
end;

function TF_ConfirmacionPedido.GetVariable(IDProducto: integer): Currency;
begin
  with ZROQ_Valor_Variable do
    begin
      Close;
      ParamByName('ID_PRODUCTO').AsInteger:= IDProducto;
      Open;
      Result:= +FieldByName('PRECIO').AsCurrency;
    end;
end;

function TF_ConfirmacionPedido.NonNegativeValue(Value:currency):currency;
begin
  if (Value > 0) then
    Result:= Value
  else
    Result:= 0;
end;

procedure TF_ConfirmacionPedido.CalcularTotal;
var
  bonificacion: double;
  TotalPagado, TotalOrden, TotalOrdenTeoria, TotalAcumulado, TopeBeca, Monto_A_Pagar, Total: currency;
begin
  TotalOrden:= R_TotalOrden;
  TotalOrdenTeoria:= R_TotalOrdenTeoria;
  TotalAcumulado:= R_TotalAcumulado;
  TopeBeca:= GetVariable(2);
  TotalPagado:= GetTotalPagado(idOrden);
  Monto_A_Pagar:= 0;

  L_Total.Caption:= '$ ' + CurrToStr(TotalOrden - TotalPagado);

  if (ZQuery_Orders.FieldByName('IDACCOUNTTYPE').AsInteger in [1,2,3]) then
    begin
      Label_Bonificacion_Valor.Caption:= '0%';
    end
  else if (ZQuery_Orders.FieldByName('IDACCOUNTTYPE').AsInteger = 5) then
    begin
      Label_Bonificacion_Valor.Caption:= '100%';
      if (TotalAcumulado<TopeBeca) then
        begin
          Monto_A_Pagar:= NonNegativeValue(TotalOrdenTeoria - (TopeBeca - TotalAcumulado));
          Total:= (TotalOrdenTeoria - Monto_A_Pagar)*0 + Monto_A_Pagar*0.5 - TotalPagado;
        end
      else
        Total:= (TotalOrdenTeoria)*0.5 - TotalPagado;

      L_Total.Caption:= '$ ' + CurrToStr(Total);
    end
  else
    begin
      Label_Bonificacion_Valor.Caption:= '50%';
      Total:= (TotalOrdenTeoria)*0.5 - TotalPagado;

      L_Total.Caption:= '$ ' + CurrToStr(Total);
    end;
  L_Total2.Caption:= L_Total.Caption;
end;

function TF_ConfirmacionPedido.GetTotalPagado(IDPedido: integer): Currency;
begin
  with ZROQ_Get_Total_Pagado do
    begin
      Close;
      ParamByName('TIPO_MOV').AsSmallInt:= 1;
      ParamByName('ID_PEDIDO').AsInteger:= IDPedido;
      Open;
      Result:= FieldByName('MONTO').AsCurrency;
    end;
end;


end.

